<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Robocup-denayer-project-a: read-only/trunk/source/serial.cpp Bron Bestand</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Gegenereerd door Doxygen 1.7.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Zoeken');
--></script>
<script type="text/javascript">
function hasClass(ele,cls) {
  return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
  if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
  if (hasClass(ele,cls)) {
    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
    ele.className=ele.className.replace(reg,' ');
  }
}

function toggleVisibility(linkObj) {
 var base = linkObj.getAttribute('id');
 var summary = document.getElementById(base + '-summary');
 var content = document.getElementById(base + '-content');
 var trigger = document.getElementById(base + '-trigger');
 if ( hasClass(linkObj,'closed') ) {
   summary.style.display = 'none';
   content.style.display = 'block';
   trigger.src = 'open.png';
   removeClass(linkObj,'closed');
   addClass(linkObj,'opened');
 } else if ( hasClass(linkObj,'opened') ) {
   summary.style.display = 'block';
   content.style.display = 'none';
   trigger.src = 'closed.png';
   removeClass(linkObj,'opened');
   addClass(linkObj,'closed');
 }
 return false;
}
</script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Hoofd&nbsp;Pagina</span></a></li>
      <li><a href="annotated.html"><span>Klassen</span></a></li>
      <li class="current"><a href="files.html"><span>Bestanden</span></a></li>
      <li id="searchli">
        <div id="MSearchBox" class="MSearchBoxInactive">
          <span class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Zoeken" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </span><span class="right"></span>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&nbsp;Lijst</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<h1>read-only/trunk/source/serial.cpp</h1>  </div>
</div>
<div class="contents">
<a href="serial_8cpp.html">Ga naar de documentatie van dit bestand.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">***************************************************************************</span>
<a name="l00003"></a>00003 <span class="comment">*</span>
<a name="l00004"></a>00004 <span class="comment">* Author: Teunis van Beelen</span>
<a name="l00005"></a>00005 <span class="comment">*</span>
<a name="l00006"></a>00006 <span class="comment">* Copyright (C) 2005, 2006, 2007, 2008, 2009 Teunis van Beelen</span>
<a name="l00007"></a>00007 <span class="comment">*</span>
<a name="l00008"></a>00008 <span class="comment">* teuniz@gmail.com</span>
<a name="l00009"></a>00009 <span class="comment">*</span>
<a name="l00010"></a>00010 <span class="comment">***************************************************************************</span>
<a name="l00011"></a>00011 <span class="comment">*</span>
<a name="l00012"></a>00012 <span class="comment">* This program is free software; you can redistribute it and/or modify</span>
<a name="l00013"></a>00013 <span class="comment">* it under the terms of the GNU General Public License as published by</span>
<a name="l00014"></a>00014 <span class="comment">* the Free Software Foundation version 2 of the License.</span>
<a name="l00015"></a>00015 <span class="comment">*</span>
<a name="l00016"></a>00016 <span class="comment">* This program is distributed in the hope that it will be useful,</span>
<a name="l00017"></a>00017 <span class="comment">* but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00018"></a>00018 <span class="comment">* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00019"></a>00019 <span class="comment">* GNU General Public License for more details.</span>
<a name="l00020"></a>00020 <span class="comment">*</span>
<a name="l00021"></a>00021 <span class="comment">* You should have received a copy of the GNU General Public License along</span>
<a name="l00022"></a>00022 <span class="comment">* with this program; if not, write to the Free Software Foundation, Inc.,</span>
<a name="l00023"></a>00023 <span class="comment">* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
<a name="l00024"></a>00024 <span class="comment">*</span>
<a name="l00025"></a>00025 <span class="comment">***************************************************************************</span>
<a name="l00026"></a>00026 <span class="comment">*</span>
<a name="l00027"></a>00027 <span class="comment">* This version of GPL is at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt</span>
<a name="l00028"></a>00028 <span class="comment">*</span>
<a name="l00029"></a>00029 <span class="comment">***************************************************************************</span>
<a name="l00030"></a>00030 <span class="comment">*/</span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 <span class="preprocessor">#include &quot;<a class="code" href="serial_8h.html">serial.h</a>&quot;</span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="preprocessor">#ifdef __linux__   </span><span class="comment">/* Linux */</span>
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 
<a name="l00041"></a>00041 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[22],
<a name="l00042"></a>00042     error;
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="keyword">struct </span>termios new_port_settings,
<a name="l00045"></a>00045        old_port_settings[22];
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 <span class="keywordtype">char</span> <a class="code" href="serial_8cpp.html#ab2bffefc20b89744ece9ac8d2cd32d69">comports</a>[22][13]={<span class="stringliteral">&quot;/dev/ttyS0&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS1&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS2&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS3&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS4&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS5&quot;</span>,
<a name="l00048"></a>00048                        <span class="stringliteral">&quot;/dev/ttyS6&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS7&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS8&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS9&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS10&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS11&quot;</span>,
<a name="l00049"></a>00049                        <span class="stringliteral">&quot;/dev/ttyS12&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS13&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS14&quot;</span>,<span class="stringliteral">&quot;/dev/ttyS15&quot;</span>,<span class="stringliteral">&quot;/dev/ttyUSB0&quot;</span>,
<a name="l00050"></a>00050                        <span class="stringliteral">&quot;/dev/ttyUSB1&quot;</span>,<span class="stringliteral">&quot;/dev/ttyUSB2&quot;</span>,<span class="stringliteral">&quot;/dev/ttyUSB3&quot;</span>,<span class="stringliteral">&quot;/dev/ttyUSB4&quot;</span>,<span class="stringliteral">&quot;/dev/ttyUSB5&quot;</span>};
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 
<a name="l00053"></a>00053 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afcbe0bdca93dd392b104bf7c7775ba42">OpenComport</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">int</span> baudrate)
<a name="l00054"></a>00054 {
<a name="l00055"></a>00055   <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#ac7bd0a51fb021944212b758995a194f9">baudr</a>;
<a name="l00056"></a>00056 
<a name="l00057"></a>00057   <span class="keywordflow">if</span>((comport_number&gt;21)||(comport_number&lt;0))
<a name="l00058"></a>00058   {
<a name="l00059"></a>00059     printf(<span class="stringliteral">&quot;illegal comport number\n&quot;</span>);
<a name="l00060"></a>00060     <span class="keywordflow">return</span>(1);
<a name="l00061"></a>00061   }
<a name="l00062"></a>00062 
<a name="l00063"></a>00063   <span class="keywordflow">switch</span>(baudrate)
<a name="l00064"></a>00064   {
<a name="l00065"></a>00065     <span class="keywordflow">case</span>      50 : baudr = B50;
<a name="l00066"></a>00066                    <span class="keywordflow">break</span>;
<a name="l00067"></a>00067     <span class="keywordflow">case</span>      75 : baudr = B75;
<a name="l00068"></a>00068                    <span class="keywordflow">break</span>;
<a name="l00069"></a>00069     <span class="keywordflow">case</span>     110 : baudr = B110;
<a name="l00070"></a>00070                    <span class="keywordflow">break</span>;
<a name="l00071"></a>00071     <span class="keywordflow">case</span>     134 : baudr = B134;
<a name="l00072"></a>00072                    <span class="keywordflow">break</span>;
<a name="l00073"></a>00073     <span class="keywordflow">case</span>     150 : baudr = B150;
<a name="l00074"></a>00074                    <span class="keywordflow">break</span>;
<a name="l00075"></a>00075     <span class="keywordflow">case</span>     200 : baudr = B200;
<a name="l00076"></a>00076                    <span class="keywordflow">break</span>;
<a name="l00077"></a>00077     <span class="keywordflow">case</span>     300 : baudr = B300;
<a name="l00078"></a>00078                    <span class="keywordflow">break</span>;
<a name="l00079"></a>00079     <span class="keywordflow">case</span>     600 : baudr = B600;
<a name="l00080"></a>00080                    <span class="keywordflow">break</span>;
<a name="l00081"></a>00081     <span class="keywordflow">case</span>    1200 : baudr = B1200;
<a name="l00082"></a>00082                    <span class="keywordflow">break</span>;
<a name="l00083"></a>00083     <span class="keywordflow">case</span>    1800 : baudr = B1800;
<a name="l00084"></a>00084                    <span class="keywordflow">break</span>;
<a name="l00085"></a>00085     <span class="keywordflow">case</span>    2400 : baudr = B2400;
<a name="l00086"></a>00086                    <span class="keywordflow">break</span>;
<a name="l00087"></a>00087     <span class="keywordflow">case</span>    4800 : baudr = B4800;
<a name="l00088"></a>00088                    <span class="keywordflow">break</span>;
<a name="l00089"></a>00089     <span class="keywordflow">case</span>    9600 : baudr = B9600;
<a name="l00090"></a>00090                    <span class="keywordflow">break</span>;
<a name="l00091"></a>00091     <span class="keywordflow">case</span>   19200 : baudr = B19200;
<a name="l00092"></a>00092                    <span class="keywordflow">break</span>;
<a name="l00093"></a>00093     <span class="keywordflow">case</span>   38400 : baudr = B38400;
<a name="l00094"></a>00094                    <span class="keywordflow">break</span>;
<a name="l00095"></a>00095     <span class="keywordflow">case</span>   57600 : baudr = B57600;
<a name="l00096"></a>00096                    <span class="keywordflow">break</span>;
<a name="l00097"></a>00097     <span class="keywordflow">case</span>  115200 : baudr = B115200;
<a name="l00098"></a>00098                    <span class="keywordflow">break</span>;
<a name="l00099"></a>00099     <span class="keywordflow">case</span>  230400 : baudr = B230400;
<a name="l00100"></a>00100                    <span class="keywordflow">break</span>;
<a name="l00101"></a>00101     <span class="keywordflow">case</span>  460800 : baudr = B460800;
<a name="l00102"></a>00102                    <span class="keywordflow">break</span>;
<a name="l00103"></a>00103     <span class="keywordflow">case</span>  500000 : baudr = B500000;
<a name="l00104"></a>00104                    <span class="keywordflow">break</span>;
<a name="l00105"></a>00105     <span class="keywordflow">case</span>  576000 : baudr = B576000;
<a name="l00106"></a>00106                    <span class="keywordflow">break</span>;
<a name="l00107"></a>00107     <span class="keywordflow">case</span>  921600 : baudr = B921600;
<a name="l00108"></a>00108                    <span class="keywordflow">break</span>;
<a name="l00109"></a>00109     <span class="keywordflow">case</span> 1000000 : baudr = B1000000;
<a name="l00110"></a>00110                    <span class="keywordflow">break</span>;
<a name="l00111"></a>00111     <span class="keywordflow">default</span>      : printf(<span class="stringliteral">&quot;invalid baudrate\n&quot;</span>);
<a name="l00112"></a>00112                    <span class="keywordflow">return</span>(1);
<a name="l00113"></a>00113                    <span class="keywordflow">break</span>;
<a name="l00114"></a>00114   }
<a name="l00115"></a>00115 
<a name="l00116"></a>00116   <a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number] = open(<a class="code" href="serial_8cpp.html#ab2bffefc20b89744ece9ac8d2cd32d69">comports</a>[comport_number], O_RDWR | O_NOCTTY | O_NDELAY);
<a name="l00117"></a>00117   <span class="keywordflow">if</span>(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number]==-1)
<a name="l00118"></a>00118   {
<a name="l00119"></a>00119     perror(<span class="stringliteral">&quot;unable to open comport &quot;</span>);
<a name="l00120"></a>00120     <span class="keywordflow">return</span>(1);
<a name="l00121"></a>00121   }
<a name="l00122"></a>00122 
<a name="l00123"></a>00123   error = tcgetattr(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], old_port_settings + comport_number);
<a name="l00124"></a>00124   <span class="keywordflow">if</span>(error==-1)
<a name="l00125"></a>00125   {
<a name="l00126"></a>00126     close(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number]);
<a name="l00127"></a>00127     perror(<span class="stringliteral">&quot;unable to read portsettings &quot;</span>);
<a name="l00128"></a>00128     <span class="keywordflow">return</span>(1);
<a name="l00129"></a>00129   }
<a name="l00130"></a>00130   memset(&amp;new_port_settings, 0, <span class="keyword">sizeof</span>(new_port_settings));  <span class="comment">/* clear the new struct */</span>
<a name="l00131"></a>00131 
<a name="l00132"></a>00132   new_port_settings.c_cflag = baudr | CS8 | CLOCAL | CREAD;
<a name="l00133"></a>00133   new_port_settings.c_iflag = IGNPAR;
<a name="l00134"></a>00134   new_port_settings.c_oflag = 0;
<a name="l00135"></a>00135   new_port_settings.c_lflag = 0;
<a name="l00136"></a>00136   new_port_settings.c_cc[VMIN] = 0;      <span class="comment">/* block untill n bytes are received */</span>
<a name="l00137"></a>00137   new_port_settings.c_cc[VTIME] = 0;     <span class="comment">/* block untill a timer expires (n * 100 mSec.) */</span>
<a name="l00138"></a>00138   error = tcsetattr(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], TCSANOW, &amp;new_port_settings);
<a name="l00139"></a>00139   <span class="keywordflow">if</span>(error==-1)
<a name="l00140"></a>00140   {
<a name="l00141"></a>00141     close(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number]);
<a name="l00142"></a>00142     perror(<span class="stringliteral">&quot;unable to adjust portsettings &quot;</span>);
<a name="l00143"></a>00143     <span class="keywordflow">return</span>(1);
<a name="l00144"></a>00144   }
<a name="l00145"></a>00145 
<a name="l00146"></a>00146   <span class="keywordflow">return</span>(0);
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148 
<a name="l00149"></a>00149 
<a name="l00150"></a>00150 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#ad2ab07792b6f73449d98cc5f906fd0a8">PollComport</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> size)
<a name="l00151"></a>00151 {
<a name="l00152"></a>00152   <span class="keywordtype">int</span> n;
<a name="l00153"></a>00153 
<a name="l00154"></a>00154 <span class="preprocessor">#ifndef __STRICT_ANSI__                       </span><span class="comment">/* __STRICT_ANSI__ is defined when the -ansi option is used for gcc */</span>
<a name="l00155"></a>00155   <span class="keywordflow">if</span>(size&gt;SSIZE_MAX)  size = (int)SSIZE_MAX;  <span class="comment">/* SSIZE_MAX is defined in limits.h */</span>
<a name="l00156"></a>00156 <span class="preprocessor">#else</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span>  <span class="keywordflow">if</span>(size&gt;4096)  size = 4096;
<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>
<a name="l00160"></a>00160   n = read(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], buf, size);
<a name="l00161"></a>00161 
<a name="l00162"></a>00162   <span class="keywordflow">return</span>(n);
<a name="l00163"></a>00163 }
<a name="l00164"></a>00164 
<a name="l00165"></a>00165 
<a name="l00166"></a>00166 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afe562336ecdfdbe686af2ee967512a87">SendByte</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00167"></a>00167 {
<a name="l00168"></a>00168   <span class="keywordtype">int</span> n;
<a name="l00169"></a>00169 
<a name="l00170"></a>00170   n = write(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], &amp;byte, 1);
<a name="l00171"></a>00171   <span class="keywordflow">if</span>(n&lt;0)  <span class="keywordflow">return</span>(1);
<a name="l00172"></a>00172 
<a name="l00173"></a>00173   <span class="keywordflow">return</span>(0);
<a name="l00174"></a>00174 }
<a name="l00175"></a>00175 
<a name="l00176"></a>00176 
<a name="l00177"></a>00177 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#af2a032058a335a76ef91d025ac63942b">SendBuf</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> size)
<a name="l00178"></a>00178 {
<a name="l00179"></a>00179   <span class="keywordflow">return</span>(write(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], buf, size));
<a name="l00180"></a>00180 }
<a name="l00181"></a>00181 
<a name="l00182"></a>00182 
<a name="l00183"></a>00183 <span class="keywordtype">void</span> <a class="code" href="serial_8cpp.html#a76b8f1bd6cb72a1e153df998c2742842">CloseComport</a>(<span class="keywordtype">int</span> comport_number)
<a name="l00184"></a>00184 {
<a name="l00185"></a>00185   close(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number]);
<a name="l00186"></a>00186   tcsetattr(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], TCSANOW, old_port_settings + comport_number);
<a name="l00187"></a>00187 }
<a name="l00188"></a>00188 
<a name="l00189"></a>00189 <span class="comment">/*</span>
<a name="l00190"></a>00190 <span class="comment">Constant  Description</span>
<a name="l00191"></a>00191 <span class="comment">TIOCM_LE  DSR (data set ready/line enable)</span>
<a name="l00192"></a>00192 <span class="comment">TIOCM_DTR DTR (data terminal ready)</span>
<a name="l00193"></a>00193 <span class="comment">TIOCM_RTS RTS (request to send)</span>
<a name="l00194"></a>00194 <span class="comment">TIOCM_ST  Secondary TXD (transmit)</span>
<a name="l00195"></a>00195 <span class="comment">TIOCM_SR  Secondary RXD (receive)</span>
<a name="l00196"></a>00196 <span class="comment">TIOCM_CTS CTS (clear to send)</span>
<a name="l00197"></a>00197 <span class="comment">TIOCM_CAR DCD (data carrier detect)</span>
<a name="l00198"></a>00198 <span class="comment">TIOCM_CD  Synonym for TIOCM_CAR</span>
<a name="l00199"></a>00199 <span class="comment">TIOCM_RNG RNG (ring)</span>
<a name="l00200"></a>00200 <span class="comment">TIOCM_RI  Synonym for TIOCM_RNG</span>
<a name="l00201"></a>00201 <span class="comment">TIOCM_DSR DSR (data set ready)</span>
<a name="l00202"></a>00202 <span class="comment">*/</span>
<a name="l00203"></a>00203 
<a name="l00204"></a>00204 <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afb5505a101fedc56fcf467e6ef0f3513">IsCTSEnabled</a>(<span class="keywordtype">int</span> comport_number)
<a name="l00205"></a>00205 {
<a name="l00206"></a>00206   <span class="keywordtype">int</span> status;
<a name="l00207"></a>00207 
<a name="l00208"></a>00208   status = ioctl(<a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[comport_number], TIOCMGET, &amp;status);
<a name="l00209"></a>00209 
<a name="l00210"></a>00210   <span class="keywordflow">if</span>(status&amp;TIOCM_CTS) <span class="keywordflow">return</span>(1);
<a name="l00211"></a>00211   <span class="keywordflow">else</span> <span class="keywordflow">return</span>(0);
<a name="l00212"></a>00212 }
<a name="l00213"></a>00213 
<a name="l00214"></a>00214 
<a name="l00215"></a>00215 <span class="preprocessor">#else         </span><span class="comment">/* windows */</span>
<a name="l00216"></a>00216 
<a name="l00217"></a>00217 
<a name="l00218"></a><a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">00218</a> HANDLE <a class="code" href="serial_8cpp.html#aa220cb7c3b32ff4721c6b41ad7596113">Cport</a>[16];
<a name="l00219"></a>00219 
<a name="l00220"></a>00220 
<a name="l00221"></a><a class="code" href="serial_8cpp.html#ab2bffefc20b89744ece9ac8d2cd32d69">00221</a> <span class="keywordtype">char</span> <a class="code" href="serial_8cpp.html#ab2bffefc20b89744ece9ac8d2cd32d69">comports</a>[16][10]={<span class="stringliteral">&quot;\\\\.\\COM1&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM2&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM3&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM4&quot;</span>,
<a name="l00222"></a>00222                        <span class="stringliteral">&quot;\\\\.\\COM5&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM6&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM7&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM8&quot;</span>,
<a name="l00223"></a>00223                        <span class="stringliteral">&quot;\\\\.\\COM9&quot;</span>,  <span class="stringliteral">&quot;\\\\.\\COM10&quot;</span>, <span class="stringliteral">&quot;\\\\.\\COM11&quot;</span>, <span class="stringliteral">&quot;\\\\.\\COM12&quot;</span>,
<a name="l00224"></a>00224                        <span class="stringliteral">&quot;\\\\.\\COM13&quot;</span>, <span class="stringliteral">&quot;\\\\.\\COM14&quot;</span>, <span class="stringliteral">&quot;\\\\.\\COM15&quot;</span>, <span class="stringliteral">&quot;\\\\.\\COM16&quot;</span>};
<a name="l00225"></a>00225 
<a name="l00226"></a><a class="code" href="serial_8cpp.html#ac7bd0a51fb021944212b758995a194f9">00226</a> <span class="keywordtype">char</span> baudr[64];
<a name="l00227"></a>00227 
<a name="l00228"></a>00228 
<a name="l00229"></a><a class="code" href="rs232_8h.html#a15bfbfb28c6b93afcba0411ff125a1c8">00229</a> <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afcbe0bdca93dd392b104bf7c7775ba42">OpenComport</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">int</span> baudrate)
<a name="l00230"></a>00230 {
<a name="l00231"></a>00231   <span class="keywordflow">if</span>((comport_number&gt;15)||(comport_number&lt;0))
<a name="l00232"></a>00232   {
<a name="l00233"></a>00233     printf(<span class="stringliteral">&quot;illegal comport number\n&quot;</span>);
<a name="l00234"></a>00234     <span class="keywordflow">return</span>(1);
<a name="l00235"></a>00235   }
<a name="l00236"></a>00236 
<a name="l00237"></a>00237   <span class="keywordflow">switch</span>(baudrate)
<a name="l00238"></a>00238   {
<a name="l00239"></a>00239     <span class="keywordflow">case</span>     110 : strcpy(baudr, <span class="stringliteral">&quot;baud=110 data=8 parity=N stop=1&quot;</span>);
<a name="l00240"></a>00240                    <span class="keywordflow">break</span>;
<a name="l00241"></a>00241     <span class="keywordflow">case</span>     300 : strcpy(baudr, <span class="stringliteral">&quot;baud=300 data=8 parity=N stop=1&quot;</span>);
<a name="l00242"></a>00242                    <span class="keywordflow">break</span>;
<a name="l00243"></a>00243     <span class="keywordflow">case</span>     600 : strcpy(baudr, <span class="stringliteral">&quot;baud=600 data=8 parity=N stop=1&quot;</span>);
<a name="l00244"></a>00244                    <span class="keywordflow">break</span>;
<a name="l00245"></a>00245     <span class="keywordflow">case</span>    1200 : strcpy(baudr, <span class="stringliteral">&quot;baud=1200 data=8 parity=N stop=1&quot;</span>);
<a name="l00246"></a>00246                    <span class="keywordflow">break</span>;
<a name="l00247"></a>00247     <span class="keywordflow">case</span>    2400 : strcpy(baudr, <span class="stringliteral">&quot;baud=2400 data=8 parity=N stop=1&quot;</span>);
<a name="l00248"></a>00248                    <span class="keywordflow">break</span>;
<a name="l00249"></a>00249     <span class="keywordflow">case</span>    4800 : strcpy(baudr, <span class="stringliteral">&quot;baud=4800 data=8 parity=N stop=1&quot;</span>);
<a name="l00250"></a>00250                    <span class="keywordflow">break</span>;
<a name="l00251"></a>00251     <span class="keywordflow">case</span>    9600 : strcpy(baudr, <span class="stringliteral">&quot;baud=9600 data=8 parity=N stop=1&quot;</span>);
<a name="l00252"></a>00252                    <span class="keywordflow">break</span>;
<a name="l00253"></a>00253     <span class="keywordflow">case</span>   19200 : strcpy(baudr, <span class="stringliteral">&quot;baud=19200 data=8 parity=N stop=1&quot;</span>);
<a name="l00254"></a>00254                    <span class="keywordflow">break</span>;
<a name="l00255"></a>00255     <span class="keywordflow">case</span>   38400 : strcpy(baudr, <span class="stringliteral">&quot;baud=38400 data=8 parity=N stop=1&quot;</span>);
<a name="l00256"></a>00256                    <span class="keywordflow">break</span>;
<a name="l00257"></a>00257     <span class="keywordflow">case</span>   57600 : strcpy(baudr, <span class="stringliteral">&quot;baud=57600 data=8 parity=N stop=1&quot;</span>);
<a name="l00258"></a>00258                    <span class="keywordflow">break</span>;
<a name="l00259"></a>00259     <span class="keywordflow">case</span>  115200 : strcpy(baudr, <span class="stringliteral">&quot;baud=115200 data=8 parity=N stop=1&quot;</span>);
<a name="l00260"></a>00260                    <span class="keywordflow">break</span>;
<a name="l00261"></a>00261     <span class="keywordflow">case</span>  128000 : strcpy(baudr, <span class="stringliteral">&quot;baud=128000 data=8 parity=N stop=1&quot;</span>);
<a name="l00262"></a>00262                    <span class="keywordflow">break</span>;
<a name="l00263"></a>00263     <span class="keywordflow">case</span>  256000 : strcpy(baudr, <span class="stringliteral">&quot;baud=256000 data=8 parity=N stop=1&quot;</span>);
<a name="l00264"></a>00264                    <span class="keywordflow">break</span>;
<a name="l00265"></a>00265     <span class="keywordflow">default</span>      : printf(<span class="stringliteral">&quot;invalid baudrate\n&quot;</span>);
<a name="l00266"></a>00266                    <span class="keywordflow">return</span>(1);
<a name="l00267"></a>00267                    <span class="keywordflow">break</span>;
<a name="l00268"></a>00268   }
<a name="l00269"></a>00269 
<a name="l00270"></a>00270   Cport[comport_number] = CreateFileA(comports[comport_number],
<a name="l00271"></a>00271                       GENERIC_READ|GENERIC_WRITE,
<a name="l00272"></a>00272                       0,                          <span class="comment">/* no share  */</span>
<a name="l00273"></a>00273                       NULL,                       <span class="comment">/* no security */</span>
<a name="l00274"></a>00274                       OPEN_EXISTING,
<a name="l00275"></a>00275                       0,                          <span class="comment">/* no threads */</span>
<a name="l00276"></a>00276                       NULL);                      <span class="comment">/* no templates */</span>
<a name="l00277"></a>00277 
<a name="l00278"></a>00278   <span class="keywordflow">if</span>(Cport[comport_number]==INVALID_HANDLE_VALUE)
<a name="l00279"></a>00279   {
<a name="l00280"></a>00280     printf(<span class="stringliteral">&quot;unable to open comport\n&quot;</span>);
<a name="l00281"></a>00281     <span class="keywordflow">return</span>(1);
<a name="l00282"></a>00282   }
<a name="l00283"></a>00283 
<a name="l00284"></a>00284   DCB port_settings;
<a name="l00285"></a>00285   memset(&amp;port_settings, 0, <span class="keyword">sizeof</span>(port_settings));  <span class="comment">/* clear the new struct  */</span>
<a name="l00286"></a>00286   port_settings.DCBlength = <span class="keyword">sizeof</span>(port_settings);
<a name="l00287"></a>00287 
<a name="l00288"></a>00288   <span class="keywordflow">if</span>(!BuildCommDCBA(baudr, &amp;port_settings))
<a name="l00289"></a>00289   {
<a name="l00290"></a>00290     printf(<span class="stringliteral">&quot;unable to set comport dcb settings\n&quot;</span>);
<a name="l00291"></a>00291     CloseHandle(Cport[comport_number]);
<a name="l00292"></a>00292     <span class="keywordflow">return</span>(1);
<a name="l00293"></a>00293   }
<a name="l00294"></a>00294 
<a name="l00295"></a>00295   <span class="keywordflow">if</span>(!SetCommState(Cport[comport_number], &amp;port_settings))
<a name="l00296"></a>00296   {
<a name="l00297"></a>00297     printf(<span class="stringliteral">&quot;unable to set comport cfg settings\n&quot;</span>);
<a name="l00298"></a>00298     CloseHandle(Cport[comport_number]);
<a name="l00299"></a>00299     <span class="keywordflow">return</span>(1);
<a name="l00300"></a>00300   }
<a name="l00301"></a>00301 
<a name="l00302"></a>00302   COMMTIMEOUTS Cptimeouts;
<a name="l00303"></a>00303 
<a name="l00304"></a>00304   Cptimeouts.ReadIntervalTimeout         = MAXDWORD;
<a name="l00305"></a>00305   Cptimeouts.ReadTotalTimeoutMultiplier  = 0;
<a name="l00306"></a>00306   Cptimeouts.ReadTotalTimeoutConstant    = 0;
<a name="l00307"></a>00307   Cptimeouts.WriteTotalTimeoutMultiplier = 0;
<a name="l00308"></a>00308   Cptimeouts.WriteTotalTimeoutConstant   = 0;
<a name="l00309"></a>00309 
<a name="l00310"></a>00310   <span class="keywordflow">if</span>(!SetCommTimeouts(Cport[comport_number], &amp;Cptimeouts))
<a name="l00311"></a>00311   {
<a name="l00312"></a>00312     printf(<span class="stringliteral">&quot;unable to set comport time-out settings\n&quot;</span>);
<a name="l00313"></a>00313     CloseHandle(Cport[comport_number]);
<a name="l00314"></a>00314     <span class="keywordflow">return</span>(1);
<a name="l00315"></a>00315   }
<a name="l00316"></a>00316 
<a name="l00317"></a>00317   <span class="keywordflow">return</span>(0);
<a name="l00318"></a>00318 }
<a name="l00319"></a>00319 
<a name="l00320"></a>00320 
<a name="l00321"></a><a class="code" href="rs232_8h.html#a5282a9bb7ab7af509498a130d860f48f">00321</a> <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#ad2ab07792b6f73449d98cc5f906fd0a8">PollComport</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> size)
<a name="l00322"></a>00322 {
<a name="l00323"></a>00323   <span class="keywordtype">int</span> n;
<a name="l00324"></a>00324   <span class="keywordflow">if</span>(size&gt;4096)  size = 4096;
<a name="l00325"></a>00325 
<a name="l00326"></a>00326 <span class="comment">/* added the void pointer cast, otherwise gcc will complain about */</span>
<a name="l00327"></a>00327 <span class="comment">/* &quot;warning: dereferencing type-punned pointer will break strict aliasing rules&quot; */</span>
<a name="l00328"></a>00328 
<a name="l00329"></a>00329   ReadFile(Cport[comport_number], buf, size, (LPDWORD)((<span class="keywordtype">void</span> *)&amp;n), NULL);
<a name="l00330"></a>00330 
<a name="l00331"></a>00331   <span class="keywordflow">return</span>(n);
<a name="l00332"></a>00332 }
<a name="l00333"></a>00333 
<a name="l00334"></a>00334 
<a name="l00335"></a><a class="code" href="rs232_8h.html#a29482f336dad205f7ba2fef3e8656b97">00335</a> <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afe562336ecdfdbe686af2ee967512a87">SendByte</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00336"></a>00336 {
<a name="l00337"></a>00337   <span class="keywordtype">int</span> n;
<a name="l00338"></a>00338 
<a name="l00339"></a>00339   WriteFile(Cport[comport_number], &amp;byte, 1, (LPDWORD)((<span class="keywordtype">void</span> *)&amp;n), NULL);
<a name="l00340"></a>00340 
<a name="l00341"></a>00341   <span class="keywordflow">if</span>(n&lt;0)  <span class="keywordflow">return</span>(1);
<a name="l00342"></a>00342 
<a name="l00343"></a>00343   <span class="keywordflow">return</span>(0);
<a name="l00344"></a>00344 }
<a name="l00345"></a>00345 
<a name="l00346"></a>00346 
<a name="l00347"></a><a class="code" href="rs232_8h.html#a94c73be461c56184fa18c078ee7e73cd">00347</a> <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#af2a032058a335a76ef91d025ac63942b">SendBuf</a>(<span class="keywordtype">int</span> comport_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> size)
<a name="l00348"></a>00348 {
<a name="l00349"></a>00349   <span class="keywordtype">int</span> n;
<a name="l00350"></a>00350 
<a name="l00351"></a>00351   <span class="keywordflow">if</span>(WriteFile(Cport[comport_number], buf, size, (LPDWORD)((<span class="keywordtype">void</span> *)&amp;n), NULL))
<a name="l00352"></a>00352   {
<a name="l00353"></a>00353     <span class="keywordflow">return</span>(n);
<a name="l00354"></a>00354   }
<a name="l00355"></a>00355 
<a name="l00356"></a>00356   <span class="keywordflow">return</span>(-1);
<a name="l00357"></a>00357 }
<a name="l00358"></a>00358 
<a name="l00359"></a>00359 
<a name="l00360"></a><a class="code" href="rs232_8h.html#aa72a2d8a38edf63c253c095c2254a5d2">00360</a> <span class="keywordtype">void</span> <a class="code" href="serial_8cpp.html#a76b8f1bd6cb72a1e153df998c2742842">CloseComport</a>(<span class="keywordtype">int</span> comport_number)
<a name="l00361"></a>00361 {
<a name="l00362"></a>00362   CloseHandle(Cport[comport_number]);
<a name="l00363"></a>00363 }
<a name="l00364"></a>00364 
<a name="l00365"></a>00365 
<a name="l00366"></a><a class="code" href="rs232_8h.html#aa9a71beaacfca3678b90bb02b2ff65b6">00366</a> <span class="keywordtype">int</span> <a class="code" href="serial_8cpp.html#afb5505a101fedc56fcf467e6ef0f3513">IsCTSEnabled</a>(<span class="keywordtype">int</span> comport_number)
<a name="l00367"></a>00367 {
<a name="l00368"></a>00368   <span class="keywordtype">int</span> status;
<a name="l00369"></a>00369 
<a name="l00370"></a>00370   GetCommModemStatus(Cport[comport_number], (LPDWORD)((<span class="keywordtype">void</span> *)&amp;status));
<a name="l00371"></a>00371 
<a name="l00372"></a>00372   <span class="keywordflow">if</span>(status&amp;MS_CTS_ON) <span class="keywordflow">return</span>(1);
<a name="l00373"></a>00373   <span class="keywordflow">else</span> <span class="keywordflow">return</span>(0);
<a name="l00374"></a>00374 }
<a name="l00375"></a>00375 
<a name="l00376"></a>00376 
<a name="l00377"></a>00377 <span class="preprocessor">#endif</span>
<a name="l00378"></a>00378 <span class="preprocessor"></span>
<a name="l00379"></a>00379 
<a name="l00380"></a><a class="code" href="rs232_8h.html#a82c0b566ffa7fa6ad1c9ba3071e77eaf">00380</a> <span class="keywordtype">void</span> <a class="code" href="serial_8cpp.html#aae9ecec774ea4c995930ca52555a578b">cprintf</a>(<span class="keywordtype">int</span> comport_number, <span class="keyword">const</span> <span class="keywordtype">char</span> *text)  <span class="comment">/* sends a string to serial port */</span>
<a name="l00381"></a>00381 {
<a name="l00382"></a>00382   <span class="keywordflow">while</span>(*text != 0)   <a class="code" href="serial_8cpp.html#afe562336ecdfdbe686af2ee967512a87">SendByte</a>(comport_number, *(text++));
<a name="l00383"></a>00383 }
<a name="l00384"></a>00384 
<a name="l00385"></a>00385 
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Gegenereerd op Do 19 Mei 2011 10:15:28 voor Robocup-denayer-project-a door&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>
